package com.sojson.util.security.shiro.interceptor.impl;

import java.lang.annotation.Annotation;

import org.apache.shiro.authz.AuthorizationException;
import org.apache.shiro.authz.aop.AuthorizingAnnotationHandler;

import com.sojson.util.security.shiro.annotation.Login;
import com.sojson.util.security.shiro.annotation.RequiredPermission;

/**
 * 登录注解实际处理类
 * 
 * @author liu
 * @date 2020-11-02
 */
public class LoginAnnotationHandler extends AuthorizingAnnotationHandler {

    public LoginAnnotationHandler() {
        // 告诉shiro这个处理器处理哪个注解
        super(Login.class);
        System.out.println("拦截器:LoginAnnotationHandler:LoginAnnotationHandler");
    }

    /**
     * 获取注解中value的所有值
     * 
     * @param a
     * @return
     */
    protected String[] getAnnotationValue(Annotation a) {
        System.out.println("拦截器:RequiredPermissionAnnotationHandler:getAnnotationValue");
        RequiredPermission rpAnnotation = (RequiredPermission)a;
        return rpAnnotation.value();
    }

    /**
     * 主要方法
     */
    @SuppressWarnings("unused")
    @Override
    public void assertAuthorized(Annotation a) throws AuthorizationException {
        System.out.println("拦截器:RequiredPermissionAnnotationHandler:assertAuthorized");
        // 方法上的注解是否是这个注解,如果不是就不做处理
        System.out.println("Login注解启动了");
        if (!(a instanceof Login)) {
            return;
        }

        Login loginAnnotation = (Login)a;
        System.out.println("Login注解启动了");

    }

}
